
#pragma once

#include "EstadoAI.h"
#include <boost/shared_ptr.hpp>


class StateMachine
{
protected:

	//boost::shared_ptr<EstadoAI> mEstadoActual;
	Process::Ptr mEstadoActual;
	unsigned long mIDActor;


	void CrearEstado(std::string const & estado);


public:

	//! Construye una StateMachine para la IA
	//!
	//! @param actor_id El identificador del actor vinculado a la Maquina.
	StateMachine(unsigned long actor_id)
		: mIDActor(actor_id), mEstadoActual((EstadoAI*)0)
	{

	}

	//! Destruye la StateMachine. 
	//!
	virtual ~StateMachine()
	{
		if(mEstadoActual)
			mEstadoActual->Finish();
	}

	//! Cambia a el estado especificado.
	//! 
	void SetEstado(std::string const & estado);

};